package gov.pr.celepar.sentinela.admin.action;

import gov.pr.celepar.sentinela.Constants;
import gov.pr.celepar.sentinela.admin.dao.GrupoDAO;
import gov.pr.celepar.sentinela.admin.dao.factory.DAOFactoryServer;
import gov.pr.celepar.sentinela.admin.excecao.SentinelaServerException;
import gov.pr.celepar.sentinela.admin.form.GrupoForm;
import gov.pr.celepar.framework.util.Pagina;
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class PesquisaGrupoAction extends BaseAction {

	public String executar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		this.forward = "lista_grupo";
		boolean gruposAdm = false;
		try {
			DAOFactoryServer daof = DAOFactoryServer.getDAOFactory();
			GrupoDAO bg = daof.getGrupoDAO();

			GrupoForm grupoForm = (GrupoForm) form;

			Integer indicePagina = new Integer(
					grupoForm.getIndice() == null ? "1" : grupoForm.getIndice());
			Integer totalRegistros = null;

			if (request.getParameter("gruposAdm") != null
					&& request.getParameter("gruposAdm") != "") {
				gruposAdm = true;
			}

			if (grupoForm.getTotalRegistros() != null) {
				totalRegistros = new Integer(grupoForm.getTotalRegistros());
			} else {
				long total = 0;
				if (this.comunicacao.isRoot()) {
					total = bg.contarPesquisar(grupoForm.getNome(), grupoForm
							.getDescricao(), gruposAdm);

				} else {
					long grupos[] = this.comunicacao.getIdGrupos();
					Long codGrupos[] = null;
					if (grupos != null) {
						codGrupos = new Long[grupos.length];
						for (int i = 0; i < grupos.length; i++)
							codGrupos[i] = Long.valueOf(grupos[i]);
					}
					total = bg.contarPesquisarAutorizados(new Long(
							this.comunicacao.getCodUsuario()), grupoForm
							.getNome(), grupoForm.getDescricao(), codGrupos,
							gruposAdm);

				}
				totalRegistros = new Integer((int) total);
				indicePagina = new Integer("1");
			}

			Collection dados = null;
			if (this.comunicacao.isRoot()) {
				dados = bg.pesquisarPaginado(indicePagina.intValue(), grupoForm
						.getNome(), grupoForm.getDescricao(), gruposAdm);

			} else {
				long grupos[] = this.comunicacao.getIdGrupos();
				Long codGrupos[] = null;
				if (grupos != null) {
					codGrupos = new Long[grupos.length];
					for (int i = 0; i < grupos.length; i++)
						codGrupos[i] = Long.valueOf(grupos[i]);
				}

				dados = bg.pesquisarAutorizadosPaginado(new Long(
						this.comunicacao.getCodUsuario()), indicePagina
						.intValue(), grupoForm.getNome(), grupoForm
						.getDescricao(), codGrupos, gruposAdm);
			}

			if (dados != null && !dados.isEmpty()) {
				Pagina pagina = new Pagina(Constants.QUANTIDADE_REGISTROS_GRID,
						indicePagina, totalRegistros);
				pagina.setRegistros(dados);
				request.setAttribute("pagina", pagina);
			} else {
				throw new SentinelaServerException(
						"Nenhum registro encontrado! ");
			}
		} catch (SentinelaServerException appEx) {
			throw appEx;
		} catch (Exception e) {
			throw e;
		}
		return "lista_grupo";
	}

}
